package top.byteio.common.core.crypto;

import org.springframework.security.crypto.bcrypt.BCrypt;

/**
*
* SimpleBCrypt 是一种专为密码哈希设计的单向加密算法，基于 Blowfish 块加密算法构建。
* <p>
*     SimpleBCrypt 的主要特点是：
*     <ul>
*         <li>1,内置盐值机制,自动生成随机盐值，防止彩虹表攻击</li>
*         <li>2,适应性安全,盐值与哈希结果一起存储，无需单独管理</li>
*         <li>3, 通过成本因子（cost factor）控制计算复杂度可随硬件性能提升调整安全级别</li>
*         <li>4, 抗暴力破解,故意设计为计算密集型算法,即使使用高性能硬件也难以快速破解</li>
* </p>
* @author lerryxia
* @date 2025/10/6
*/
public class SimpleBCrypt implements ICrypt{

    /**
     * 加密字符串
     * @param input 待加密的字符串
     * @return java.lang.String 加密后的字符串
     * @author lerryxia
     **/
    public static String encode(String input){
        if (input == null) {
            throw new IllegalArgumentException("Input cannot be null");
        }
        // 使用默认成本因子10进行加密
        return BCrypt.hashpw(input, BCrypt.gensalt());
    }

    /**
     * 验证字符串是否匹配加密后的结果
     * @param input 待验证的字符串
     * @param encoded 加密后的结果
     * @return boolean true 验证成功，false 验证失败
     * @author lerryxia
     **/
    public static boolean validate(String input, String encoded){
        return BCrypt.checkpw(input, encoded);
    }
}
